package hah;

import java.util.*;

public class LuoXuanMatrix {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res=new ArrayList<>();
        int rowlen= matrix.length;
        int collen=matrix[0].length;
        int a1=0; int a2=0;
        int b1=rowlen-1; int b2=collen-1;
        while (a1<=b1&&a2<=b2){
            add(matrix,a1,a2,b1,b2,res);
            a1++;
            a2++;
            b1--;
            b2--;
        }
        return res;
    }
    public void add(int[][] matrix,int start1,int start2,int end1,int end2,List<Integer> res){
        if (start1==end1){
            for (int i=start2;i<=end2;i++){
                res.add(matrix[start1][i]);
            }
            return;
        }
        if (start2==end2){
            for (int i=start1;i<=end1;i++){
                res.add(matrix[i][end2]);
            }
            return;
        }
        for (int i=start2;i<end2;i++){
            res.add(matrix[start1][i]);
        }
        for (int i=start1;i<end1;i++){
            res.add(matrix[i][end2]);
        }
        for (int i=end2;i>start2;i--){
            res.add(matrix[end1][i]);
        }
        for (int i=end1;i>start1;i--){
            res.add(matrix[i][start2]);
        }
    }
}
